home *** CD-ROM | disk | FTP | other *** search
- ;unsigned short allocate_pages(number);
- ; unsigned short number;
-
- EXTRN _memory_model:byte
- EXTRN _error_code:byte
-
- _TEXT SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:_TEXT
- PUBLIC _allocate_pages
- _allocate_pages proc near
- mov ah,43h ;function number
- mov bx,sp ;BX pts to stack
- cmp _memory_model,0 ;near or far?
- jle begin ;jump if near
- inc bx ;else add 2 to BX
- inc bx ;
- begin: mov bx,ss:[bx+2] ;get number of pages
- int 67H ;EMS interrupt
- mov _error_code,0 ;0 = success!
- or ah,ah ;0 if successful
- jz L1 ;jump if no error
- inc _error_code ;1 = software malfunction
- cmp ah,80h ;test
- je L1 ;jump if error 1
- inc _error_code ;2 = hardware malfunction
- cmp ah,81h ;test
- je L1 ;jump if error 2
- inc _error_code ;3 = all handles used
- cmp ah,85h ;test
- je L1 ;jump if error 3
- inc _error_code ;4 = too few expanded mem pages
- cmp ah,87h ;test
- je L1 ;jump if error 4
- inc _error_code ;5 = too few available pages
- cmp ah,88h ;test
- je L1 ;jump if error 5
- inc _error_code ;6 = asked for zero pages
- L1: mov ax,dx ;set handle for return
- cmp _memory_model,0 ;quit
- jle Quit ;
- db 0CBh ;RET far
- Quit: ret ;RET near
- _allocate_pages endp
- _TEXT ENDS
- END